package com.ruoyi.platform.system.role.dao.menu;

import com.ruoyi.platform.system.role.pojo.menu.RoleMenuDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 角色和菜单关联表
 *
 * @author lcf
 * @version 0.0.1
 * @since 2020-11-16 10:12:50
 */
@Mapper
@Repository
@Scope("prototype")
public interface RoleMenuRdbDAO {
    /**
     * 插入数据 全部插入
     *
     * @param record {@link RoleMenuDO}
     * @return 影响行数
     **/
    int insertRoleMenu(RoleMenuDO record);

    /**
     * 插入数据 部分插入
     *
     * @param record {@link RoleMenuDO}
     * @return 影响行数
     **/
    int insertRoleMenuSelective(RoleMenuDO record);

    /**
     * 插入数据 批量插入
     *
     * @param recordList {@link List<RoleMenuDO>}
     * @return 影响行数
     **/
    int insertRoleMenuBatch(@Param("list") List<RoleMenuDO> recordList);

    /**
     * 批量部分插入
     *
     * @param recordList {@link List<RoleMenuDO>}
     * @return 影响行数
     **/
    int insertRoleMenuSelectiveBatch(@Param("list") List<RoleMenuDO> recordList);

    /**
     * 更新数据 全部更新
     *
     * @param record {@link RoleMenuDO}
     * @return 影响行数
     **/
    int updateRoleMenuByPrimaryKey(RoleMenuDO record);

    /**
     * 更新数据 部分更新
     *
     * @param record {@link RoleMenuDO}
     * @return 影响行数
     **/
    int updateRoleMenuByPrimaryKeySelective(RoleMenuDO record);

    /**
     * 通过主键删除该数据 本质上是更改数据状态
     *
     * @param menuId 主键Number
     *               ,	 * @param roleId 主键Number
     * @return 影响行数
     **/
    int delRoleMenuByPrimaryKey(@Param("menuId") Long menuId, @Param("roleId") Long roleId);

    /**
     * 通过主键查询数据
     *
     * @param menuId 主键Number
     *               ,
     * @param roleId 主键Number
     * @return {@link RoleMenuDO}
     **/
    RoleMenuDO selectRoleMenuByPrimaryKey(@Param("menuId") Long menuId, @Param("roleId") Long roleId);

    /**
     * 通过主键列表查询数据
     *
     * @param menuIdList {@link List<Long>} 主键Number列表
     *                   ,
     * @param roleIdList {@link List<Long>} 主键Number列表
     * @return {@link List<RoleMenuDO>}
     **/
    List<RoleMenuDO> selectRoleMenuByPrimaryKeyList(@Param("list") List<Long> menuIdList, @Param("list") List<Long> roleIdList);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询
     *
     * @param query {@link RoleMenuDO}
     * @return {@link List<RoleMenuDO>}
     **/
    List<RoleMenuDO> selectByRoleMenu(RoleMenuDO query);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询数量
     *
     * @param query {@link RoleMenuDO}
     * @return 统计行数
     **/
    int selectRoleMenuCount(RoleMenuDO query);

    /**
     * 获取角色权限数量
     */
    int selectCountByRole(@Param("roleIdList") List<Long> roleIdList, @Param("menuCode") String menuCode);

    /**
     * 删除角色权限
     */
    void delByRoleId(long roleId);

    /**
     * 根据角色id获取权限列表
     */
    List<RoleMenuDO> selectByRoleIdList(List<Long> roleIdList);
}